package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblMaterialAsset;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetBuscarForm;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;


public class AssetsMaterialesRegistrar
         extends
		Action
{
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        
        HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                // formulario
                AssetBuscarForm f = ( AssetBuscarForm ) form ;
                int result = 0;
                int cveAsset = f.getCveAsset( ) ;
                // toma los archivos
		List< FormFile > files = new ArrayList< FormFile >( ) ;
                
                        files.add( f.getArchivo01( ) ) ;
			files.add( f.getArchivo02( ) ) ;
			files.add( f.getArchivo03( ) ) ;
			files.add( f.getArchivo04( ) ) ;
			files.add( f.getArchivo05( ) ) ;
			files.add( f.getArchivo06( ) ) ;
			files.add( f.getArchivo07( ) ) ;
			files.add( f.getArchivo08( ) ) ;
			files.add( f.getArchivo09( ) ) ;
			files.add( f.getArchivo010( ) ) ;
			files.add( f.getArchivo011( ) ) ;
			files.add( f.getArchivo012( ) ) ;
			files.add( f.getArchivo013( ) ) ;
			files.add( f.getArchivo014( ) ) ;
			files.add( f.getArchivo015( ) ) ;
			files.add( f.getArchivo016( ) ) ;
			files.add( f.getArchivo017( ) ) ;
			files.add( f.getArchivo018( ) ) ;
			files.add( f.getArchivo019( ) ) ;
			files.add( f.getArchivo020( ) ) ;
			files.add( f.getArchivo021( ) ) ;
			files.add( f.getArchivo022( ) ) ;
			files.add( f.getArchivo023( ) ) ;
			files.add( f.getArchivo024( ) ) ;
			files.add( f.getArchivo025( ) ) ;
			files.add( f.getArchivo026( ) ) ;
			files.add( f.getArchivo027( ) ) ;
			files.add( f.getArchivo028( ) ) ;
			files.add( f.getArchivo029( ) ) ;
			files.add( f.getArchivo030( ) ) ;
                        
             String nombre = "" ;
             
             for ( int i = 0 ; i < files.size( ) ; i++ )
             {
                 
                 FormFile archivo = files.get(i) ;
                 
                                
                 if ( archivo == null ){
                     break;
                 }else{
                    
                    try {
                        nombre = archivo.getFileName() ;
                        String max = MasterCardDAO.getMaxMaterialDeAsset();
                        String filePath = MCUtil.extractMaterialAssetFileName( cveAsset , archivo.getFileName( ) , max ) ;
                        boolean mt  = MasterCardDAO.addMaterialDeAsset( cveAsset , filePath ) ;
                        
                        File materialdeassetDir = new File( MCUtil.getMaterialDeAssetDir( ) ) ;
                        if( ! materialdeassetDir.exists( ) )
                            materialdeassetDir.mkdirs( ) ;

                        File materialdeassetFile = new File( materialdeassetDir , filePath ) ;
                        FileOutputStream out = new FileOutputStream(  materialdeassetFile , false ) ;
                        out.write( archivo.getFileData( ) ) ;
                        out.close( ) ;
                        result = 2;
                    } catch (MasterCardException ex) {
                        MasterCardDAO.closeEntityManager( ) ;
                        Logger.getLogger(AssetsMaterialesRegistrar.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                 
             }
             
             String url = "AssetsMateriales.do?cveAsset=" + cveAsset + "" ;
             
             
             // en caso de que lo haga todo correctamente manda a la pagina de success
		user.setNextWorkArea( url ) ;		
		
		request.setAttribute("result" ,  result  ) ;
                
                MasterCardDAO.closeEntityManager( ) ;
		return mapping.findForward( "success" ) ;
        
    }
    
}
